EC2インスタンス作成時のユーザーデータに「rm -rf /*」を渡してみた
息抜きが必要だ
こんにちは、のんピ(@non____97)です。
最近引越しをしたのでなんだか疲れてます。
ということで、rm -rf /*
でも実行してみます。
単純にrm -rf /*
を実行するのは今まで結構やってきました。
そのため、単純に実行してもつまらないので、EC2インスタンス作成時のユーザーデータにrm -rf /*
を渡して、どのような挙動をするのか確認します。
EC2インスタンス君も
「俺をおもちゃにして遊ぶな」
と思っているに違いありません。楽しいからしょうがないですね。
早速やってみた
それでは早速やってみます。
ユーザーデータでrm -rf /*
渡して正常に実行されたとしても、ログが見えないととても悲しい気持ちになります。
そこで、以下AWSのドキュメントを参考にインスタンスのコンソールログにユーザーデータを出力するようにしてあげます。
実際に渡すユーザーデータは以下になります。
# -x to display the command to be executed set -x # Redirect /var/log/user-data.log and /dev/console exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 rm -rf /*
EC2インスタンスはAWS CDKで定義します。
EC2インスタンス作成時に準備したユーザーデータを渡すようにしてあげます。実際のコードは以下の通りです。
import { Stack, StackProps, aws_iam as iam, aws_ec2 as ec2 } from "aws-cdk-lib"; import { Construct } from "constructs"; import * as fs from "fs"; export class Ec2Stack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, "Vpc", { enableDnsHostnames: true, enableDnsSupport: true, maxAzs: 1, subnetConfiguration: [ { name: "Public", subnetType: ec2.SubnetType.PUBLIC, cidrMask: 24 }, ], }); // EC2 Instance IAM role const ec2InstanceIamRole = new iam.Role(this, "Ec2InstanceIamRole", { assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"), managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName( "AmazonSSMManagedInstanceCore" ), ], }); // User data for Amazon Linux 2 const userDataParameter = fs.readFileSync( "./src/ec2/user_data_amazon_linux2.sh", "utf8" ); const userDataAmazonLinux2 = ec2.UserData.forLinux({ shebang: "#!/bin/bash", }); userDataAmazonLinux2.addCommands(userDataParameter); // EC2 Instance new ec2.Instance(this, "Ec2Instance", { instanceType: new ec2.InstanceType("t3.micro"), machineImage: ec2.MachineImage.latestAmazonLinux({ generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2, }), vpc: vpc, blockDevices: [ { deviceName: "/dev/xvda", volume: ec2.BlockDeviceVolume.ebs(8, { encrypted: true, volumeType: ec2.EbsDeviceVolumeType.GP3, }), }, ], role: ec2InstanceIamRole, userData: userDataAmazonLinux2, }); } }
準備ができたら、npx cdk deploy
でEC2インスタンスをデプロイします。
EC2インスタンス作成後、コンソールログを確認します。
正しくログ取得がされていることが確認できました。
加えて、/var/log/journal/ec241e799eaf2c0ee222f87da91ab53c/system.journal: Journal file has been deleted, rotating.
となっていることからrm -rf /*
も正しく動作していそうですね。やったね。
get-console-outputでAWS CLIからもログを確認してみます。
$ aws ec2 get-console-output \ --instance-id i-0f64af93937b42f9d \ --output text i-0f64af93937b42f9d 1:55:39 user-data: rm: cannot remove '/sys/module/intel_idle/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/intel_idle/parameters/max_cstate': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/keyboard/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/keyboard/parameters/brl_timeout': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/keyboard/parameters/brl_nbchords': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/zswap/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/zswap/parameters/enabled': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/zswap/parameters/max_pool_percent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/zswap/parameters/compressor': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/zswap/parameters/zpool': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/tpm_crb/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/tpm_crb/version': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/initsize': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/notes/.note.gnu.build-id': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/taint': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/srcversion': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/holders/dm_region_hash': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/holders/dm_mirror': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/refcnt': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/coresize': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/initstate': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/__kcrctab': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/__ksymtab': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.orc_unwind': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.strtab': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/__mcount_loc': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.exit.text': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.bss': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.orc_unwind_ip': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.gnu.linkonce.this_module': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.symtab': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.init.text': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.note.gnu.build-id': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.text': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.data': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.rodata.str1.1': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.parainstructions': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/__ksymtab_strings': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/dm_log/sections/.rodata.str1.8': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/hid/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/hid/parameters/ignore_special_drivers': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/hid/parameters/debug': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/netpoll/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/netpoll/parameters/carrier_timeout': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/evdev/initsize': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/evdev/uevent': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/evdev/notes/.note.gnu.build-id': Operation not permitted <13>Mar 18 01:55:39 user-data: rm: cannot remove '/sys/module/evdev/taint': Operation not permitted
見覚えのあるログですね。地元に帰省した感覚と似ています。
ちなみに、表示されるログは最新の64 KB のみのようです。
表示される出力のうち、保存されるのは最新の64 KB のみです。この出力は、出力の送信から少なくとも1時間使用可能です。
念の為の確認を込めて、SSMセッションマネージャーで接続しようとしたところ、「接続できる訳ないだろ!」と言わんばかりに怒られました。当然です。
久しぶりに実行したら良い気分転換になりました
EC2インスタンス作成時のユーザーデータにrm -rf /*
を渡してみました。
ユーザーデータで渡しても正しくrm -rf /*
が実行されることを確認できて、なんだか元気が出ました。
こちらのコードは以下リポジトリに保存してます。自分の目で確かめたい人は自己責任で試してください。
この記事は誰の役にも立たないかもしれませんが、誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!